home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / g / gnu_c / gempp19.zoo / gem++19 / src / gempa.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-09  |  3.7 KB  |  198 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  This file is Copyright 1992,1993 by Warwick W. Allison.
  4. //  This file is part of the gem++ library.
  5. //  You are free to copy and modify these sources, provided you acknowledge
  6. //  the origin by retaining this notice, and adhere to the conditions
  7. //  described in the file COPYING.LIB.
  8. //
  9. /////////////////////////////////////////////////////////////////////////////
  10.  
  11. #include "gempa.h"
  12. #include "contract.h"
  13. #include <minmax.h>
  14.  
  15.  
  16. GEMpanarea::GEMpanarea() :
  17.     visibleLines(1),visibleColumns(1),
  18.     totalLines(1),totalColumns(1),
  19.     actualTopLine(0),actualLeftColumn(0)
  20. {
  21. }
  22.  
  23. GEMpanarea::GEMpanarea(int vl, int tl, int vc, int tc) :
  24.     visibleLines(vl),visibleColumns(vc),
  25.     totalLines(tl),totalColumns(tc),
  26.     actualTopLine(0),actualLeftColumn(0)
  27. {
  28. }
  29.  
  30. void GEMpanarea::SetVisibleLines(int noOfLines)
  31. {
  32.     Require(noOfLines >= 0);
  33.     Require(noOfLines <= totalLines);
  34.     
  35.     visibleLines=noOfLines;
  36.     
  37.     if (actualTopLine > totalLines - visibleLines)
  38.         actualTopLine=totalLines - visibleLines;
  39. }
  40.  
  41. void GEMpanarea::SetTotalLines(int noOfLines)
  42. {
  43.     Require(noOfLines >= 0);
  44.  
  45.     totalLines=noOfLines;
  46.  
  47.     if (noOfLines < visibleLines) {
  48.         visibleLines=totalLines;
  49.     }
  50.  
  51.     if (actualTopLine > totalLines - visibleLines) {
  52.         actualTopLine=totalLines - visibleLines;
  53.     }
  54. }
  55.  
  56. void GEMpanarea::SetTopLine(int noOfLine)
  57. {
  58.     if (noOfLine < 0)
  59.         noOfLine=0;
  60.  
  61.     if (noOfLine > totalLines - visibleLines)
  62.         noOfLine=totalLines - visibleLines;
  63.     
  64.     if (actualTopLine != noOfLine) {
  65.         actualTopLine=noOfLine;
  66.     }
  67. }
  68.  
  69. void GEMpanarea::SetVisibleColumns(int noOfColumns)
  70. {
  71.     Require(noOfColumns >= 0);
  72.     Require(noOfColumns <= totalColumns);
  73.  
  74.     if (visibleColumns != noOfColumns) {
  75.         visibleColumns=noOfColumns;
  76.         
  77.         if (actualLeftColumn > totalColumns - visibleColumns)
  78.             actualLeftColumn=totalColumns - visibleColumns;
  79.     }
  80. }
  81.  
  82. void GEMpanarea::SetTotalColumns(int noOfColumns)
  83. {
  84.     Require(noOfColumns >= 0);
  85.  
  86.     totalColumns=noOfColumns;
  87.  
  88.     if (noOfColumns < visibleColumns) {
  89.         visibleColumns=totalColumns;
  90.     }
  91.  
  92.     if (actualLeftColumn > totalColumns - visibleColumns) {
  93.         actualLeftColumn=totalColumns - visibleColumns;
  94.     }
  95. }
  96.  
  97. void GEMpanarea::SetLeftColumn(int noOfColumn)
  98. {
  99.     if (noOfColumn < 0)
  100.         noOfColumn=0;
  101.  
  102.     if (noOfColumn > totalColumns - visibleColumns)
  103.         noOfColumn=totalColumns - visibleColumns;
  104.     
  105.     if (actualLeftColumn != noOfColumn) {
  106.         actualLeftColumn=noOfColumn;
  107.     }
  108. }
  109.  
  110.  
  111. void GEMpanarea::LineUp()
  112. {
  113.     SetTopLine(actualTopLine-VLineAmount());
  114. }
  115.  
  116. void GEMpanarea::LineDown()
  117. {
  118.     SetTopLine(actualTopLine+VLineAmount());
  119. }
  120.  
  121. void GEMpanarea::PageUp()
  122. {
  123.     SetTopLine(actualTopLine-VPageAmount());
  124. }
  125.  
  126. void GEMpanarea::PageDown()
  127. {
  128.     SetTopLine(actualTopLine+VPageAmount());
  129. }
  130.  
  131.     
  132. void GEMpanarea::ColumnLeft()
  133. {
  134.     SetLeftColumn(actualLeftColumn-HColumnAmount());
  135. }
  136.  
  137. void GEMpanarea::ColumnRight()
  138. {
  139.     SetLeftColumn(actualLeftColumn+HColumnAmount());
  140. }
  141.  
  142. void GEMpanarea::PageLeft()
  143. {
  144.     SetLeftColumn(actualLeftColumn-HPageAmount());
  145. }
  146.  
  147. void GEMpanarea::PageRight()
  148. {
  149.     SetLeftColumn(actualLeftColumn+HPageAmount());
  150. }
  151.  
  152. int GEMpanarea::VLineAmount()
  153. {
  154.     return 1;
  155. }
  156.  
  157. int GEMpanarea::HColumnAmount()
  158. {
  159.     return 1;
  160. }
  161.  
  162. int GEMpanarea::VPageAmount()
  163. {
  164.     return visibleLines;
  165. }
  166.  
  167. int GEMpanarea::HPageAmount()
  168. {
  169.     return visibleColumns;
  170. }
  171.  
  172. void GEMpanarea::HGetScaledValue(int scale, int& size, int& position)
  173. {
  174.     size=
  175.         totalColumns
  176.             ? long(scale)*visibleColumns/totalColumns
  177.             : scale;
  178.  
  179.     position=
  180.         totalColumns==visibleColumns
  181.             ? 0
  182.             : actualLeftColumn*(scale-size)/(totalColumns-visibleColumns);
  183. }
  184.  
  185. void GEMpanarea::VGetScaledValue(int scale, int& size, int& position)
  186. {
  187.     size=
  188.         totalLines
  189.             ? long(scale)*visibleLines/totalLines
  190.             : scale;
  191.  
  192.     position=
  193.         totalLines==visibleLines
  194.             ? 0
  195.             : actualTopLine*(scale-size)/(totalLines-visibleLines);
  196. }
  197.  
  198.